package com.example.enums;

/**
 * 异常码
 */
public enum ErrorCode {
    /**
     * 2xx 成功
     */
    SUCCESS(20000, "成功"),

    /**
     * 4xx 客户端错误
     */
    // 400 参数错误
    INVALID_PARAMETER(40001, "参数错误"),
    FILE_CHUNK_MISSING(40002, "文件分片缺失"),

    // 401 未认证
    UNAUTHORIZED(40100, "访问此资源需要身份验证"),
    ACCESS_TOKEN_INVALID(40101, "access_token无效"),
    REFRESH_TOKEN_INVALID(40102, "refresh_token无效"),
    LOGIN_ERROR(40103, "登录出错"),

    // 403 权限问题
    NO_PERMISSION(40300, "无权访问"),
    INSUFFICIENT_PERMISSIONS(40301, "用户权限不足"),

    // 404 未找到
    DATA_NOT_FOUND(40401, "数据不存在"),

    // 409 冲突
    DATA_EXIST(40901, "数据已存在"),

    // 415 文件相关
    FILE_ERROR(41500, "文件错误"),
    FILE_UPLOAD_ERROR(41501, "文件上传错误"),
    FILE_DOWNLOAD_ERROR(41502, "文件下载错误"),
    FILE_PREVIEW_ERROR(41503,"该文件类型不支持预览"),

    /**
     * 5xx 服务端错误
     */
    SYSTEM_ERROR(50001, "系统错误"),
    DATABASE_ERROR(50002, "数据库错误"),
    WORKFLOW_ERROR(50003, "工作流错误"),

    // 502 内部调用失败（Feign、RPC、Gateway）
    INTERNAL_CALL_ERROR(50201, "内部调用错误");


    private Integer code;

    private String description;

    ErrorCode(Integer code, String description) {
        this.code = code;
        this.description = description;
    }

    public Integer getCode() {
        return this.code;
    }

    public String getDescription() {
        return this.description;
    }
}
